<?php
defined('BASEPATH') OR exit('No direct script access allowed');

//处理支付宝回跳
class Alipay extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
	}
	
	//支付宝异步通知入口
	public function notifyurl()
	{
		$this->log($_POST);
		
		
		require_once("../web/alipay/alipay.config.php");
		require_once("../web/alipay/lib/alipay_notify.class.php");
		
		//计算得出通知验证结果
		$alipayNotify = new AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyNotify();
		
		if($verify_result) {//验证成功
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//请在这里加上商户的业务逻辑程序代
		
		
			//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
		
			//获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
		
			//商户订单号
		
			$out_trade_no = $_POST['out_trade_no'];
		
			//支付宝交易号
		
			$trade_no = $_POST['trade_no'];
		
			//交易状态
			$trade_status = $_POST['trade_status'];
		
		
			if($_POST['trade_status'] == 'TRADE_FINISHED') {
				//判断该笔订单是否在商户网站中已经做过处理
				//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
				//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
				//如果有做过处理，不执行商户的业务程序
		
				//注意：
				//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
		
				//调试用，写文本函数记录程序运行情况是否正常
				//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
			}
			else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
				//判断该笔订单是否在商户网站中已经做过处理
				//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
				//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
				//如果有做过处理，不执行商户的业务程序
		
				//注意：
				//付款完成后，支付宝系统发送该交易状态通知
		
				//调试用，写文本函数记录程序运行情况是否正常
				//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
			 
			    $this->load->model('Order_model');
			    $order = $this->Order_model->get_by_where(array('no'=>$out_trade_no));
			    if (!$order['trade_no'] || $order['trade_no'] != $trade_no)
			    {
			        //更新订单信息
			        $data['trade_no'] = $trade_no;
			        $data['paytime'] = $_POST['gmt_payment'];
			        $data['total_fee'] = $_POST['total_fee'];
			        $data['paystatus'] = 2;
			        $this->Order_model->update_by_where(array('no'=>$out_trade_no),$data);
			    
			        // 				//增加档期
			        // 				$this->load->model('Orderbook_model');
			        // 				$orderbook = $this->Orderbook_model->get_by_where(array('no'=>$out_trade_no));
			        // 				if ($orderbook)
		            // 				{
		            // 					$this->load->model('Schedule_model');
		            // 					$data = array();
		            // 					$data['userid'] = $order['sellerid'];
		            // 					$data['dodate'] = $orderbook['begtime'];
		            // 					$data['enddate'] = $orderbook['endtime'];
		            // 					$data['thing'] = $order['title'];
		            // 					$data['type'] = 1;
		            // 					$data['addtime'] = time();
		            // 					$data['op_userid'] = $order['buyerid'];
		            // 					$data['op_username'] = $order['buyer_username'];
		            // 					$data['op_time'] = $order['addtime'];
		            // 					$data['status'] = 1;
		            // 					$this->Schedule_model->insert($data);
		            // 				}
			    
			        //记录用户订单信息表
			        $this->load->service('num_service');
			        //新增支出和收入总计 -- ss
			        $this->num_service->set_user_num($order['sellerid'],'be_fundnum');
			        $this->num_service->set_user_num($order['buyerid'],'fundnum');
			        //订单提示
			        $this->num_service->set_user_num($order['buyerid'],'be_ordernum_new',1);
			        $this->num_service->set_user_num($order['sellerid'],'be_ordernum_new',1);
			        
			        //交易一元可获得10魔币
			        $this->load->service('magic_service');
			        $this->magic_service->recordMagicCoins($order['buyerid'],$_POST['total_fee']*10,4);
			        
			    }
			
			}
		
			//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
			
			echo "success";		//请不要修改或删除
		
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
			//验证失败
			echo "fail";
		
			//调试用，写文本函数记录程序运行情况是否正常
			//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
		}
	}
	
	//支付宝同步通知入口
	public function returnurl()
	{
		$this->log($_GET);
		
		require_once("../web/alipay/alipay.config.php");
		require_once("../web/alipay/lib/alipay_notify.class.php");
		
		//计算得出通知验证结果
		$alipayNotify = new AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyReturn();
		if($verify_result) {//验证成功
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//请在这里加上商户的业务逻辑程序代码
		
			//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
			//获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
		
			//商户订单号
			$out_trade_no = $_GET['out_trade_no'];
		
			//支付宝交易号
			$trade_no = $_GET['trade_no'];
		
			//交易状态
			$trade_status = $_GET['trade_status'];
		
			if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
				//判断该笔订单是否在商户网站中已经做过处理
				//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
				//如果有做过处理，不执行商户的业务程序
				
				$this->load->model('Order_model');
				$order = $this->Order_model->get_by_where(array('no'=>$out_trade_no));
				if (!$order['trade_no'] || $order['trade_no'] != $trade_no)
				{
					//更新订单信息
					$data['trade_no'] = $trade_no;
					$data['paytime'] = $_GET['gmt_payment'];
					$data['total_fee'] = $_GET['total_fee'];
					$data['paystatus'] = 2;
					$this->Order_model->update_by_where(array('no'=>$out_trade_no),$data);
					
					//增加档期
					$this->load->model('Orderbook_model');
					$orderbook = $this->Orderbook_model->get_by_where(array('no'=>$out_trade_no));
					if ($orderbook)
					{
						$this->load->model('Schedule_model');
						$data = array();
						$data['userid'] = $order['sellerid'];
						$data['dodate'] = $orderbook['begtime'];
						$data['enddate'] = $orderbook['endtime'];
						$data['thing'] = $order['title'];
						$data['type'] = 1;
						$data['addtime'] = time();
						$data['op_userid'] = $order['buyerid'];
						$data['op_username'] = $order['buyer_username'];
						$data['op_time'] = $order['addtime'];
						$data['status'] = 1;
						$this->Schedule_model->insert($data);
					}
					
					//记录用户订单信息表
					$this->load->service('num_service');
					//新增支出和收入总计 -- ss
					$this->num_service->set_user_num($order['sellerid'],'be_fundnum');
					$this->num_service->set_user_num($order['buyerid'],'fundnum');
					//订单提示
					$this->num_service->set_user_num($order['buyerid'],'be_ordernum_new',1);
					$this->num_service->set_user_num($order['sellerid'],'be_ordernum_new',1);
				}
				
// 				echo "验证成功<br />";
				redirect('/m/order/detail?id='._get_key_val($order['id']));
			}
			else {
				echo "trade_status=".$_GET['trade_status'];
			}
			
		
			//——请根据您的业务逻辑来·编写程序（以上代码仅作参考）——
		
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
			//验证失败
			//如要调试，请看alipay_notify.php页面的verifyReturn函数
// 			echo "验证失败";
			redirect('/m/order');
		}
		
	}
	
	//记录日志
	private function log($content)
	{
		$this->load->model('Debug_model');
		$data['url'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
		$data['content'] = is_array($content)?serialize($content):$content;
		$data['create_time'] = date("Y-m-d H:i:s");
		$this->Debug_model->insert($data);
	}
}